# import json
from django.conf import settings
from django.http import JsonResponse


class DemoModeMiddleware:
    """
    演示模式中间件
    
    如果系统配置为演示模式（IS_DEMO_MODE=True），则拦截所有非安全请求方法
    （即 POST, PUT, PATCH, DELETE），返回统一的提示信息。
    
    例外：登录请求路径允许通过，以确保用户可以登录系统。
    """

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        # 检查是否为演示模式
        is_demo_mode = getattr(settings, 'IS_DEMO_MODE', True)

        # 如果是演示模式且请求方法不是安全方法（GET, HEAD, OPTIONS）
        if is_demo_mode and request.method not in ['GET', 'HEAD', 'OPTIONS']:
            # 检查是否为API请求（通常以/api开头）
            if request.path.startswith('/api/'):
                # 排除登录API路径
                if request.path != '/api/v1/auth/login' and request.path != '/api/v1/auth/refresh-token' and request.path != '/api/v1/auth/logout':
                    return JsonResponse({
                        'code': 'A0402',
                        'msg': '演示系统，请本地部署后关闭演示功能使用',
                        'data': None
                    }, status=403)

        # 处理请求并返回响应
        return self.get_response(request)
